/*
标志位使用流程：
1.为标志位开启静态空间(全局变量)；
2.实例化标志对象，并初始化；
3.调用get\set\clr

int main()
{
	int i;
	unsigned char flag_buf[5] ;

	T_flag flag;

	api_flag_init(&flag,flag_buf,sizeof(flag_buf));
	
	for(i = 0;i < 8*flag.byteCnt; i++)
	{
		api_flag_set(&flag,i);
		showflag(&flag);
	}

	for(i = 0;i < 8*flag.byteCnt; i++)
	{
		api_flag_clr(&flag,i);
		showflag(&flag);
	}

	printf("\n\n");

	for(i = 0;i < sizeof(flag_buf); i++)
	{
		flag_buf[i] = rand() % 256;
	}

	showflag(&flag);

	for(i = 0;i < 8*flag.byteCnt; i++)
	{
		if(i!=0 && i % 8 ==0)
		{
			printf("--");
		}

		if(api_flag_get(&flag,i) == 1)
		{
			printf("1 ");
		}
		else
		{
			printf("0 ");
		}

		
	}

	return 0;
}
*/
#ifndef _FLAG_H
#define _FLAG_H

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define FLAG_ASSERT_EN			1

#if(FLAG_ASSERT_EN == 1)
#define FLAG_ASSERT(condition)	while(condition)
#else
#define FLAG_ASSERT(condition)
#endif

typedef struct{
	unsigned char *pFlag;
	unsigned short byteCnt;
}T_flag;

void api_flag_init(T_flag *p,unsigned char *ptr,unsigned short byteCnt);
unsigned char api_flag_get(T_flag *p,unsigned int flag);
void api_flag_set(T_flag *p,unsigned int flag);
void api_flag_clr(T_flag *p,unsigned int flag);

#endif